package safe.method;

/**
 * @author caesar
 * @date 2025/7/21
 * @Description:
 * @apiNote
 */

/*
public class TicketTwo extends Thread{
//    int total = 10;//成员变量的实例变量。 每一个对象不共享。因为测试类中有多个TicketTwo的对象，所以实例不被多个线程共享
    private static int total = 10;


//    (1)所长是谁？
//        run()是非静态方法，所长是this。这里this不合适
//    (2)锁的代码范围对不对？
//        不对
    @Override
    public synchronized void run() {
        while(total>0){
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            total--;
            System.out.println(getName() +"卖出一张票，剩余：" + total);
        }
    }
}

*/
public class TicketTwo extends Thread{
    //int total = 10;//成员变量的实例变量。每一个对象不共享。因为测试类中有多个TicketTwo的对象，所以实例不被多个线程共享
    private static int total = 1000;

    @Override
    public void run() {
        while(total>0){
            saleOneTicket();
        }
    }

//    (1)所长是谁？
//        saleOneTicket()是静态方法，所长是当前类的Class对象，TicketTwo.class
//    (2)锁的代码范围对不对？
//        对
    public static synchronized  void saleOneTicket(){
        if(total>0){
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            total--;
            System.out.println(Thread.currentThread().getName() +"卖出一张票，剩余：" + total);
        }
    }
}
